【レポート】AWS AppSync と GraphQL によるデータドリブンなアプリケーション #reinvent #MBL402
MBL402: NEW LAUNCH! Data Driven Apps with GraphQL: AWS AppSync Deep Dive
ラスベガスで開催中の re:Invent 2017 にて「MBL402: NEW LAUNCH! Data Driven Apps with GraphQL: AWS AppSync Deep Dive」を聴講してきたのでレポートします。
スピーカーは下記の 2 名です。
- Rohan Deshpande
- Michael Paris
AWS とモバイルアプリ
- モバイルアプリに必要な機能
- 認証と認可
- ユーザーと ID プロバイダの管理
- 効率的なネットワーク使用
- 接続状態が悪い時でも高速なデータアクセス
- データ同期
- ユーザーの設定や状態をデバイス間で同期
- 多くのデバイスとプラットフォームへの対応
- 顧客がどこへ行っても
- ビジネスロジック
- サーバー管理不要でのステートレスなカスタムコードを実行
- コンフリクト解消
- クラウド内データコンフリクトの検知と処理
- オフラインデータアクセス
- ネットワーク接続無しのデータアクセス
- 多くのデータストア
- 複数のデータストアから異なるデータへのアクセス
- データ共有
- ユーザーデバイス間における NoSQL データの保存と照会
- リアルタイムデータのストリーム
- リアルタイムのクリックストリームログ収集とアクションの実行
- 認証と認可
どうやって実装する?
従来(REST API)
- 必要な数だけエンドポイントを用意
- 以下を対応させるのは大変
- リレーション
- 情報の削減
- クエリのサポート
- ソートとページング
- データ変更通知
本当にそれでいいの?
GraphQL とは
- API のクエリ言語
- 既存のデータをフルフィリングなクエリで実行
- クライアント、サーバーで同じスキーマを共有できる
クライアントアプリがデータをやり取りするための素晴らしい方法
- API
- リードデータのクエリ
- データの変更
- サブスクリプション
- これだけで全てを実現
GraphQL はどうやって動くの?
- データスキーマを定義
- クエリの作成
- クライアントが必要なデータだけを取り出せるようにする
- 必要なデータだけを取得、余計なデータは取らない
AWS AppSync の機能
- GraphQL のマネージドサービス
- AWS アカウントのリソースに接続
- オフラインの標準サポート
- コンフリクト解消
- エンタープライズレベルのセキュリティサポート
- API キーでも IAM を使うことが可能
- シンプルかつスケーラブルなリアルタイムデータ同期
AWS AppSync はどうやって動くの?
- スキーマの作成とアップロード
- 開発者はコンソールエディタを使用して GraphQL API を定義/デプロイできるので、アプリケーションは照会/データの変更/更新をリアルタイムで行える
- データソースと接続する
- AWS AppSync は自動的にデータソースやリソースをプロビジョニングし、それらを GraphQL API に接続する
- リアルタイム及びオフラインでデータを同期
- クライアントアプリケーションはデータをフェッチしたり、変更を加えたり、リアルタイムの変更をサブスクライブするために GraphQL API を呼び出す
- オフラインユーザーは再接続した時にアプリケーションデータを変更し、更新を取得できる
データドリブンなアプリの構築
- 一日に何百万件ものイベントを処理できる堅牢でスケーラブルなストレージ
- 地理空間検索
- モバイルとアプリのリアルタイム更新
- モバイルと Web クライアント
アプリ名「MapTap」として紹介
デモ
位置情報をプロットするアプリ MapTap
データソース
- Elasticsearch
- DynamoDB
- EC2
スキーマ
- 取得するデータとクエリを定義する
- フェッチにて変更したいデータを定義
マッピングテンプレート
operation
key
attributeValues
を設定する- キーを指定する必要がある
- 既成の共有プレートも利用可能
- 変数が利用可能(
${name}
で記述)
クエリ
- Mutation のモデルにセットして実行すると実際に書き込まれる
- 変数が利用可能
- 引数(リクエストパラメータ)は
${context.argument}
から取得できる
- 引数(リクエストパラメータ)は
- レスポンスはデータストレージによる
- これを Mapping Template で加工して返却する
- API Gateway と同様、いくつかの関数が使える(for each など)
- エディタが付いている
- コード補完やエラーメッセージなどが表示される
- スキーマに定義されていない項目はエラーが表示される
- BatchInvoke の Lambda 発火で非同期書き込みが可能
クライアント
Web アプリとモバイルアプリの同期のデモ
- Lambda を定期的に実行させランダムに座標を切り替える
- モバイルアプリでサブスクライブしてリアルタイムで反映
- Alexaに問いかけて座標を変えるデモもあり
AWS の構成
従来
- 以下のサーバーを用意する必要がある
- Web
- WebSocket
- PubSub
- 取得したいリソースの数だけ API を用意しなければならない
AWS AppSync
- サーバーの構築は不要
- AWS AppSync が吸収
- API はひとつだけ
- GraphQL API なので取得したいリソースが返る
- Alexa Skill も使えるよ!
AWS AppSync の利点
- クライアントは要求するデータのみを受け取る
- 1 回のリクエストで多くのデータソースから多くのリソースを取得できる
- イントロスペクションによる自己文書化 API
- 強い型システム
- 強力な開発者ツール
- より単純な API の進化
感想
AWS AppSync を利用することで必要な作業が削減され、開発者の負担がより少なくなりそうです。
私としては非常に興味のある GraphQL API は REST API を倒すことができるのでしょうか!?
これからどんどん試してみたいと思います。